在上一篇搞定球聚時間的選單後,我們需要計算下次球聚的日期 (只顯示星期幾而沒有日期,不方便記日子)
藉由Ruby的Time class和rails的helper,可以將計算的過程藏在後面,而不弄亂前端的view
首先,因為球聚的時間是記錄星期幾,在model裡僅是個數字 (0~6表示週日到週六)
下次球聚的日期會根據使用者看到文章的當天計算
例如,預計週三聚會,使用者週四才看到文章。此時需顯示下次聚會日期 (也就是下週三)
Time Class
Ruby的Time class提供wday,可得知日期對應到星期幾,例如
1 2 3 4
| 2.2.0 :009 > t = Time.now => 2016-04-22 15:20:42 +0800 2.2.0 :010 > t.wday => 5
|
View
app/views/posts/show.html.erb1 2 3 4
| ...略 <p> 時間:<%= next_meetup_date(@post.day.to_i) %> </p>
|
Helper
day_offset是預計週幾聚會,利用Time.now.wday和它之間的關係算出下次聚會日期
next_meetup_date除了顯示日期,還加上星期幾
app/helper/posts_helper.rb1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| module PostsHelper def calculate_date(day_offset) meetup_day = day_offset current_day = Time.now.wday next_date = DateTime.now + (meetup_day - current_day).days if meetup_day < current_day next_date += 7.days end next_date.strftime('%Y/%m/%d') end
def next_meetup_date(day_offset) calculate_date(day_offset) + ' (' + I18n.t(:"date.day_names")[day_offset] + ')' end end
|
使用helper的好處是將來如果要改變顯示格式,只要改一個地方就好,其它的view也能使用。
參考來源:
Ruby Time文件
strftime 格式化時間的說明